/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * GuiDadosLocacao.java
 *
 * Created on 13/11/2011, 17:13:34
 */
package view.gui;

import controller.ControllerLocacao;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;
import model.dominio.Cliente;
import model.dominio.Locacao;
import model.dominio.Motorista;
import model.dominio.Veiculo;

/**
 *
 * @author Rodrigo
 * Classe responsável pelo tratamento de dados de Locação.
 * Tal tratamento é referente a possibilidade de Cadastro ou Edição do objeto em questão.
 * 
 */
public class GuiDadosLocacao  extends JInternalFramePermissao {

   private static Locacao locacao;

   /** Creates new form GuiDadosLocacao */
   /**
    * Construtor da interface gráfica para o tratamento de dados.
    * @throws MaskFormatter
    * Exceção lançada quando a data utilizada não está no formato correto.
    */
   public GuiDadosLocacao() {
      initComponents();
      Calendar c = Calendar.getInstance();
      SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
      data.setText(formatador.format(c.getTime()));
      locacao = new Locacao();
   }

   /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
   @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        menuMotorista = new javax.swing.JPopupMenu();
        cliente = new javax.swing.JMenuItem();
        buscar = new javax.swing.JMenuItem();
        painelCliente = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        cpfCliente = new javax.swing.JLabel();
        nomeCliente = new javax.swing.JLabel();
        telefoneCliente = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        localizarCliente = new javax.swing.JButton();
        jLabel13 = new javax.swing.JLabel();
        painelVeiculo = new javax.swing.JPanel();
        localizarVeiculo = new javax.swing.JButton();
        jLabel3 = new javax.swing.JLabel();
        placaVeiculo = new javax.swing.JLabel();
        marcaVeiculo = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        modeloVeiculo = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        baseVeiculo = new javax.swing.JLabel();
        unicaVeiculo = new javax.swing.JLabel();
        precoKmVeiculo = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        corVeiculo = new javax.swing.JLabel();
        painelLocacao = new javax.swing.JPanel();
        jLabel10 = new javax.swing.JLabel();
        kilometragem = new javax.swing.JTextField();
        jLabel12 = new javax.swing.JLabel();
        data = new javax.swing.JFormattedTextField();
        tipoLocacao = new javax.swing.JComboBox();
        jLabel14 = new javax.swing.JLabel();
        jLabel15 = new javax.swing.JLabel();
        previsaoDias = new javax.swing.JSpinner();
        Cancelar = new javax.swing.JButton();
        Cadastrar = new javax.swing.JButton();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabelaMotoristas = new javax.swing.JTable();
        addMotorista = new javax.swing.JButton();
        remMotorista = new javax.swing.JButton();

        cliente.setText("Usar o cliente como motorista");
        cliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                clienteActionPerformed(evt);
            }
        });
        menuMotorista.add(cliente);

        buscar.setText("Buscar Motorista");
        buscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscarActionPerformed(evt);
            }
        });
        menuMotorista.add(buscar);

        setClosable(true);
        getContentPane().setLayout(null);

        painelCliente.setBorder(javax.swing.BorderFactory.createTitledBorder("Cliente"));
        painelCliente.setLayout(null);

        jLabel1.setText("Nome:");
        painelCliente.add(jLabel1);
        jLabel1.setBounds(20, 30, 40, 20);
        painelCliente.add(cpfCliente);
        cpfCliente.setBounds(80, 60, 110, 20);
        painelCliente.add(nomeCliente);
        nomeCliente.setBounds(80, 30, 190, 20);
        painelCliente.add(telefoneCliente);
        telefoneCliente.setBounds(80, 90, 90, 20);

        jLabel6.setText("Telefone:");
        painelCliente.add(jLabel6);
        jLabel6.setBounds(20, 90, 60, 20);

        localizarCliente.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/Search-icon.png"))); // NOI18N
        localizarCliente.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                localizarClienteActionPerformed(evt);
            }
        });
        painelCliente.add(localizarCliente);
        localizarCliente.setBounds(280, 30, 40, 40);

        jLabel13.setText("CPF:");
        painelCliente.add(jLabel13);
        jLabel13.setBounds(20, 60, 40, 20);

        getContentPane().add(painelCliente);
        painelCliente.setBounds(0, 0, 340, 120);

        painelVeiculo.setBorder(javax.swing.BorderFactory.createTitledBorder("Veículo"));
        painelVeiculo.setLayout(null);

        localizarVeiculo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/Search-icon.png"))); // NOI18N
        localizarVeiculo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                localizarVeiculoActionPerformed(evt);
            }
        });
        painelVeiculo.add(localizarVeiculo);
        localizarVeiculo.setBounds(350, 20, 40, 40);

        jLabel3.setText("Placa:");
        painelVeiculo.add(jLabel3);
        jLabel3.setBounds(20, 30, 50, 20);
        painelVeiculo.add(placaVeiculo);
        placaVeiculo.setBounds(60, 30, 70, 20);
        painelVeiculo.add(marcaVeiculo);
        marcaVeiculo.setBounds(60, 60, 100, 20);

        jLabel4.setText("Marca:");
        painelVeiculo.add(jLabel4);
        jLabel4.setBounds(20, 60, 50, 20);

        jLabel5.setText("Modelo:");
        painelVeiculo.add(jLabel5);
        jLabel5.setBounds(20, 90, 50, 20);
        painelVeiculo.add(modeloVeiculo);
        modeloVeiculo.setBounds(60, 90, 100, 20);

        jLabel7.setText("Tarifa Base:");
        painelVeiculo.add(jLabel7);
        jLabel7.setBounds(170, 30, 70, 20);

        jLabel8.setText("Tarifa única:");
        painelVeiculo.add(jLabel8);
        jLabel8.setBounds(170, 90, 70, 20);

        jLabel9.setText("Preço p/ km:");
        painelVeiculo.add(jLabel9);
        jLabel9.setBounds(170, 60, 70, 20);
        painelVeiculo.add(baseVeiculo);
        baseVeiculo.setBounds(250, 60, 80, 20);
        painelVeiculo.add(unicaVeiculo);
        unicaVeiculo.setBounds(250, 90, 80, 20);
        painelVeiculo.add(precoKmVeiculo);
        precoKmVeiculo.setBounds(250, 30, 80, 20);

        jLabel11.setText("Cor: ");
        painelVeiculo.add(jLabel11);
        jLabel11.setBounds(20, 120, 50, 20);
        painelVeiculo.add(corVeiculo);
        corVeiculo.setBounds(60, 120, 100, 20);

        getContentPane().add(painelVeiculo);
        painelVeiculo.setBounds(350, 0, 410, 160);

        painelLocacao.setBorder(javax.swing.BorderFactory.createTitledBorder("Dados de locação"));
        painelLocacao.setLayout(null);

        jLabel10.setText("Tipo de Locação:");
        painelLocacao.add(jLabel10);
        jLabel10.setBounds(20, 30, 100, 30);
        painelLocacao.add(kilometragem);
        kilometragem.setBounds(120, 70, 100, 30);

        jLabel12.setText("Data: ");
        painelLocacao.add(jLabel12);
        jLabel12.setBounds(20, 110, 100, 30);

        try {
            data.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        painelLocacao.add(data);
        data.setBounds(120, 110, 100, 30);

        tipoLocacao.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Selecione", "KM CONTROLADO", "DIÁRIA LIVRE" }));
        painelLocacao.add(tipoLocacao);
        tipoLocacao.setBounds(120, 30, 140, 30);

        jLabel14.setText("Kilometragem: ");
        painelLocacao.add(jLabel14);
        jLabel14.setBounds(20, 70, 100, 30);

        jLabel15.setText("Previsão de dias: ");
        painelLocacao.add(jLabel15);
        jLabel15.setBounds(20, 150, 100, 30);

        previsaoDias.setRequestFocusEnabled(false);
        painelLocacao.add(previsaoDias);
        previsaoDias.setBounds(119, 150, 100, 30);

        getContentPane().add(painelLocacao);
        painelLocacao.setBounds(0, 120, 340, 200);

        Cancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/cancelar.png"))); // NOI18N
        Cancelar.setText("Cancelar");
        Cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CancelarActionPerformed(evt);
            }
        });
        getContentPane().add(Cancelar);
        Cancelar.setBounds(400, 330, 140, 60);

        Cadastrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/salvar.png"))); // NOI18N
        Cadastrar.setText("Cadastrar");
        Cadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                CadastrarActionPerformed(evt);
            }
        });
        getContentPane().add(Cadastrar);
        Cadastrar.setBounds(230, 330, 140, 60);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Motoristas"));
        jPanel1.setLayout(null);

        tabelaMotoristas.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nome", "CPF", "CNH"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tabelaMotoristas.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane1.setViewportView(tabelaMotoristas);

        jPanel1.add(jScrollPane1);
        jScrollPane1.setBounds(10, 60, 390, 90);

        addMotorista.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/add-32.png"))); // NOI18N
        addMotorista.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addMotoristaActionPerformed(evt);
            }
        });
        jPanel1.add(addMotorista);
        addMotorista.setBounds(310, 20, 40, 40);

        remMotorista.setIcon(new javax.swing.ImageIcon(getClass().getResource("/view/imagens/delete-32.png"))); // NOI18N
        remMotorista.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                remMotoristaActionPerformed(evt);
            }
        });
        jPanel1.add(remMotorista);
        remMotorista.setBounds(360, 20, 40, 40);

        getContentPane().add(jPanel1);
        jPanel1.setBounds(350, 160, 410, 160);

        setBounds(0, 0, 781, 427);
    }// </editor-fold>//GEN-END:initComponents

    private void CancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelarActionPerformed
       this.dispose();
    }//GEN-LAST:event_CancelarActionPerformed

    private void CadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CadastrarActionPerformed
       if (locacao.getCliente() == null) {
	 JOptionPane.showMessageDialog(null, "É necessário cadastrar um cliente para a locação!", "Falha.", JOptionPane.ERROR_MESSAGE);
	 return;
       } else if(locacao.getVeiculo() == null) {
	JOptionPane.showMessageDialog(null, "É necessário cadastrar um veículo para a locação!", "Falha.", JOptionPane.ERROR_MESSAGE);
	return;
       } else if(locacao.getMotoristas().isEmpty()) {
	 JOptionPane.showMessageDialog(null, "É necessário cadastrar um motorista para a locação!", "Falha.", JOptionPane.ERROR_MESSAGE);
       } else if(tipoLocacao.getSelectedIndex()==0 || kilometragem.getText().isEmpty() || data.getText().equals("  /  /    ") || Integer.parseInt(previsaoDias.getValue().toString())<=0) {
	 JOptionPane.showMessageDialog(null, "É necessário cadastrar as informações da locação!", "Falha.", JOptionPane.ERROR_MESSAGE);
	 return;
       }
       
       locacao.setDataSaida(data.getText());
       locacao.setTipoLocacao(tipoLocacao.getSelectedIndex());
       locacao.setPrevisaoDias(Integer.parseInt(previsaoDias.getValue().toString()));
       locacao.setKmSaida(Long.parseLong(kilometragem.getText()));
       if (ControllerLocacao.salvar(locacao)) {
	 JOptionPane.showMessageDialog(null, "Dados da locação registrados com sucesso!", "Sucesso.", JOptionPane.INFORMATION_MESSAGE);
	 this.dispose();
       } else {
	 JOptionPane.showMessageDialog(null, "Falha ao registrar os dados da locação!", "Falha.", JOptionPane.ERROR_MESSAGE);
       }
    }//GEN-LAST:event_CadastrarActionPerformed

    private void localizarClienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_localizarClienteActionPerformed
       // TODO add your handling code here:
       GuiBuscarCliente c = new GuiBuscarCliente(1);
       GuiPrincipal.addJanela(c);
    }//GEN-LAST:event_localizarClienteActionPerformed

    private void localizarVeiculoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_localizarVeiculoActionPerformed
       GuiBuscarVeiculo v = new GuiBuscarVeiculo(1);
       GuiPrincipal.addJanela(v);

    }//GEN-LAST:event_localizarVeiculoActionPerformed

    private void addMotoristaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addMotoristaActionPerformed
       menuMotorista.show(addMotorista, 0, 40);
    }//GEN-LAST:event_addMotoristaActionPerformed

    private void remMotoristaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_remMotoristaActionPerformed
       int row = tabelaMotoristas.getSelectedRow();
       if (row >= 0) {
	 String cnh = tabelaMotoristas.getValueAt(row, 2).toString();
	 String cpf = tabelaMotoristas.getValueAt(row, 1).toString();
	 ((DefaultTableModel) tabelaMotoristas.getModel()).removeRow(row);
	 locacao.remMotorista(cnh);
	 if (locacao.getCliente().getCpf().equals(cpf)) {
	    cliente.setEnabled(true);
	 }
       }
    }//GEN-LAST:event_remMotoristaActionPerformed

    private void clienteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clienteActionPerformed
       Motorista m = new Motorista();
       m.setNome(locacao.getCliente().getNome());
       m.setCpf(locacao.getCliente().getCpf());
       m.setEndereco(locacao.getCliente().getEndereco());
       m.setTelefone(locacao.getCliente().getTelefone());
       m.setCnh(JOptionPane.showInputDialog(null, "Digite a CNH do Cliente.", "CNH", JOptionPane.QUESTION_MESSAGE));
       if (!m.getCnh().isEmpty()) {
	 addMotorista(m);
	 cliente.setEnabled(false);
       }
    }//GEN-LAST:event_clienteActionPerformed

    private void buscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscarActionPerformed
        GuiPrincipal.addJanela(new GuiBuscarMotorista(2));
    }//GEN-LAST:event_buscarActionPerformed
   public static void preencheCliente(Cliente c) {
      nomeCliente.setText(c.getNome());
      cpfCliente.setText(c.getCpf());
      telefoneCliente.setText(c.getTelefone());
      locacao.setCliente(c);
   }

   public static void preencheVeiculo(Veiculo v) {
      DecimalFormat nf = new DecimalFormat("###,###.00");
      marcaVeiculo.setText(v.getMarca());
      placaVeiculo.setText(v.getPlaca().toUpperCase());
      modeloVeiculo.setText(v.getModelo());
      corVeiculo.setText(v.getCor());
      unicaVeiculo.setText("R$ " + nf.format(v.getTipo().getTaxaUnica()));

      baseVeiculo.setText("R$ " + nf.format(v.getTipo().getPrecoBase()));

      if (v.getTipo().getPrecoKm() >= 1.0) {
	precoKmVeiculo.setText("R$ " + nf.format(v.getTipo().getPrecoBase()));
      } else {
	precoKmVeiculo.setText("R$ 0" + nf.format(v.getTipo().getPrecoKm()));
      }
      locacao.setVeiculo(v);
   }

   public static void addMotorista(Motorista motorista) {
      DefaultTableModel dtm = (DefaultTableModel) tabelaMotoristas.getModel();

      String[] s = new String[3];
      s[0] = motorista.getNome();
      s[1] = motorista.getCpf();
      s[2] = motorista.getCnh();

      dtm.addRow(s);

      locacao.addMotorista(motorista);

   }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Cadastrar;
    private javax.swing.JButton Cancelar;
    private javax.swing.JButton addMotorista;
    private static javax.swing.JLabel baseVeiculo;
    private javax.swing.JMenuItem buscar;
    private javax.swing.JMenuItem cliente;
    private static javax.swing.JLabel corVeiculo;
    private static javax.swing.JLabel cpfCliente;
    private javax.swing.JFormattedTextField data;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel15;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextField kilometragem;
    private javax.swing.JButton localizarCliente;
    private javax.swing.JButton localizarVeiculo;
    private static javax.swing.JLabel marcaVeiculo;
    private javax.swing.JPopupMenu menuMotorista;
    private static javax.swing.JLabel modeloVeiculo;
    private static javax.swing.JLabel nomeCliente;
    private javax.swing.JPanel painelCliente;
    private javax.swing.JPanel painelLocacao;
    private javax.swing.JPanel painelVeiculo;
    private static javax.swing.JLabel placaVeiculo;
    private static javax.swing.JLabel precoKmVeiculo;
    private javax.swing.JSpinner previsaoDias;
    private javax.swing.JButton remMotorista;
    private static javax.swing.JTable tabelaMotoristas;
    private static javax.swing.JLabel telefoneCliente;
    private javax.swing.JComboBox tipoLocacao;
    private static javax.swing.JLabel unicaVeiculo;
    // End of variables declaration//GEN-END:variables

    @Override
    public int getPermissao() {
        return 18;
    }
}
